package main

import (
	"errors"
	"fiberTest/internal/model/utils"
	"fiberTest/internal/routes"
	"fiberTest/pkg/utils"
	"github.com/gofiber/fiber/v2"
	"github.com/gofiber/fiber/v2/log"
	"github.com/gofiber/fiber/v2/middleware/recover"
)

func main() {
	config := pkg.GetConfig()
	//config.App = fiber.New(
	//	fiber.Config{
	//		// 全局自定义错误处理程序
	//		ErrorHandler: func(c *fiber.Ctx, err error) error {
	//			log.Info("info 正在使用全局的统一异常处理器进行处理")
	//			log.Debug("debug 正在使用全局的统一异常处理器进行处理")
	//			log.Warn("Warn 正在使用全局的统一异常处理器进行处理")
	//			log.Error("Error 正在使用全局的统一异常处理器进行处理")
	//			log.Panic("Panic 正在使用全局的统一异常处理器进行处理")
	//
	//			// 致命级别的日志在打印的同时会抛出异常，终止程序
	//			//log.Fatal("Fatal 正在使用全局的统一异常处理器进行处理")
	//
	//			return c.Status(fiber.StatusBadRequest).JSON(utils.GlobalErrorHandlerResp{
	//				Success: false,
	//				Message: err.Error(),
	//			})
	//		},
	//	})

	// 使用自定义的异常处理器
	config.App = fiber.New(fiber.Config{
		ErrorHandler: defaultHandler,
	})
	app := config.App
	app.Use(recover.New())

	routes.RegisterTestRoute()
	port := config.ServerConfig.Port
	_ = config.App.Listen(":" + port)
}

func defaultHandler(c *fiber.Ctx, err error) error {
	log.Info("走了自定义的异常处理器")
	// 状态码默认为500
	code := fiber.StatusInternalServerError

	// 如果是*fiber.Error，则检索自定义状态码
	var e *fiber.Error
	if errors.As(err, &e) {
		code = e.Code
	}

	// 设置Content-Type: text/plain; charset=utf-8
	c.Set(fiber.HeaderContentType, fiber.MIMETextPlainCharsetUTF8)

	body := utils.GlobalErrorHandlerResp{
		Success: false,
		Message: err.Error(),
	}

	// 返回状态码和错误消息
	return c.Status(code).JSON(body)
}
